package czolgisci.tiles.factory;

import czolgisci.tiles.AMovableTile;
import czolgisci.tiles.ATile;

/**
 * @author pillow
 * @pattern <ul>
 * 			<li>Fabryka Abstrakcyjna - Zapewnia interfejs umożliwiający tworzenie
 *          rodzin obiektów kafelkowych bez specyfikowania ich klas konkretnych.
 *          
 *          Podczas wykonywania programu tworzony jest jeden egzemplarz klasy konkretnej
 *			fabryki (np. StandardTileFactory). Ta fabryka konkretna tworzy
 *			kafelki o pewnej szczególnej implementacji. Aby utworzyć inne
 *			kafelki, należy skorzystać z innej fabryki konkretnej.</li>
 *			<li>Singleton - tylko jedna instancja tej klasy jest dozwolona</li>
 *			<ul>
 * 
 */
public interface ITileFactory
{
	/**
	 * Tworzy czołg
	 * @return nowy czołg
	 */
	public AMovableTile makeTank();

	/**
	 * Tworzy nabój
	 * @return nowy nabój
	 */
	public AMovableTile makeBullet();

	/**
	 * Tworzy fragment ściany
	 * @return fragment nowej ściany
	 */
	public ATile makeWall();
}
